<?php
/* © 2020-2025 ALYR.NET */
/**
 * 钉钉应用统一配置文件
 * 集中管理所有钉钉应用相关的配置项
 */

// 声明全局配置数组
$DINGTALK_CONFIG = [
    // 应用凭证 - 使用H5微应用的凭证
    'appId' => 'XXXXXXXXXXXXXXXX',  // Client ID (原 AppKey 和 SuiteKey)
    'appSecret' => 'XXXXXXXXXXXXXXXXXXXXXXXXX', // Client Secret
    'agentId' => 'XXXXXXXXXXXXXXXXX',                 // 企业内部应用AgentId
    'corpId' => 'XXXXXXXXXXXXXXXXX', // 企业ID（替换为公司的企业ID）
    
    // API端点 - 确保使用最新的API接口
    'api' => [
        'tokenUrl' => 'https://api.dingtalk.com/v1.0/oauth2/userAccessToken',
        'userInfoUrl' => 'https://api.dingtalk.com/v1.0/contact/users/me',
        'oauthUrl' => 'https://login.dingtalk.com/oauth2/auth' // 更新为新版OAuth授权地址
    ],
    
    // 登录相关设置
    'login' => [
        'redirectUri' => 'https://moderation.gysj.vip/auth.php', // 本地开发环境，生产环境需要修改为实际域名
        'sessionLifetime' => 12 * 3600,   // 会话有效期（秒）
        'debug' => false                  // 是否启用调试模式
    ],
    
    // 日志设置
    'log' => [
        'enabled' => true,                // 是否启用日志
        'dir' => __DIR__ . '/../logs',    // 日志目录
        'file' => __DIR__ . '/../logs/dingtalk_' . date('Y-m-d') . '.log'  // 日志文件
    ]
];

/**
 * 获取配置项值
 * 
 * @param string $key 配置键名，支持点号分隔的多级键名
 * @param mixed $default 默认值（如果配置项不存在）
 * @return mixed 配置项的值
 */
function get_dingtalk_config($key, $default = null) {
    global $DINGTALK_CONFIG;
    
    // 处理多级键名
    if (strpos($key, '.') !== false) {
        $keys = explode('.', $key);
        $value = $DINGTALK_CONFIG;
        
        foreach ($keys as $k) {
            if (!isset($value[$k])) {
                return $default;
            }
            $value = $value[$k];
        }
        
        return $value;
    }
    
    // 单级键名
    return $DINGTALK_CONFIG[$key] ?? $default;
}

/**
 * 记录钉钉相关日志
 * 
 * @param string $message 日志消息
 * @param string $type 日志类型 (info, success, warning, error)
 * @return bool 是否成功写入日志
 */
function log_dingtalk($message, $type = 'info') {
    // 检查是否启用日志
    if (!get_dingtalk_config('log.enabled', true)) {
        return false;
    }
    
    // 确保日志目录存在
    $logDir = get_dingtalk_config('log.dir');
    if (!file_exists($logDir)) {
        if (!mkdir($logDir, 0755, true)) {
            // 如果无法创建目录，尝试使用系统临时目录
            $logDir = sys_get_temp_dir();
        }
    }
    
    // 获取日志文件路径
    $logFile = get_dingtalk_config('log.file');
    if (!is_writable(dirname($logFile))) {
        // 如果日志文件所在目录不可写，使用系统临时目录
        $logFile = sys_get_temp_dir() . '/dingtalk_' . date('Y-m-d') . '.log';
    }
    
    // 格式化日志内容
    $timestamp = date('Y-m-d H:i:s');
    $logContent = "[{$timestamp}] [{$type}] {$message}" . PHP_EOL;
    
    // 添加IP地址和用户代理信息（可选）
    $ip = $_SERVER['REMOTE_ADDR'] ?? 'unknown';
    $userAgent = $_SERVER['HTTP_USER_AGENT'] ?? 'unknown';
    $logContent .= "  IP: {$ip}, UA: {$userAgent}" . PHP_EOL;
    
    // 写入日志
    return @file_put_contents($logFile, $logContent, FILE_APPEND) !== false;
}

// 返回配置数组，方便引用
return $DINGTALK_CONFIG;